// class 类名在TS的一个项目环境下只能出现一次
class UserD {
    name:string = "";
    age:number = 0;
    sex:string = "";
    say():void {
        // 当前方法中的 this 当前 class 构成的实例对象
        console.log(this.name,this.age,this.sex);
    }
}
var user1:UserD = new UserD();
user1.name = "tom";
user1.age = 33;
user1.sex = "M";
user1.say();
console.log(user1);

var user2:UserD = new UserD();
user2.name = "json";
user2.age = 23;
user2.sex = "aa";
console.log(user2);


// TS中class的构造函数重写
class UserE {
    // 当class的构造函数被重写，且完成属性赋值时
    // 属性定义时的初始值 将失去存在意义，此时属性可以只做声明
        // name:string = "";
    // age:number = 0;
    // sex:string = "";
    name:string;
    age:number;
    sex:string;

    // 描述当前class的够赞函数的方法体和形参
    constructor(name:string,age:number,sex:string){
        // 重写userE的构造函数
        // 构造函数中的this 
        this.name = name;
        this.age = age;
        this.sex = sex;
    }

    say():void{
        // 当前方法中的 this 当前 class 构成的实例对象
        console.log(this.name,this.age,this.sex);
    }
}
var user3:UserE = new UserE("aaa",11,"f");
user3.say();
console.log("user3",user3);